
package structure;

/**
 * Représente les coordonnées et l'élément d'une cellule.
 * 
 * @author David Bernard
 * @since java 1.6
 * @see AbstractDataCenter
 */
public class DataNode extends DataKey
{

	private Object contenu = null;

	/**
	 * Instancie une cellule vide à la coordonné 0,0.
	 */
	public DataNode()
	{
		this(0, 0, null);
	}

	/**
	 * Instancie une cellule vide aux coordonnée désiré.
	 * 
	 * @param ligne int, la ligne cible.
	 * @param col int, la colonne cible.
	 */
	public DataNode(int ligne, int col)
	{
		this(ligne, col, null);
	}

	/**
	 * Instacie une cellule.
	 * 
	 * @param ligne int, la ligne désiré.
	 * @param col int, la colonne désiré.
	 * @param contenu Object l'élément désiré.
	 */
	public DataNode(int ligne, int col, Object contenu)
	{
		super(ligne, col);
		this.setContenu(contenu);
	}

	/**
	 * Getter de l'élément.
	 * 
	 * @return Object, l'élément contenu.
	 */
	public Object getContenu()
	{
		return this.contenu;
	}

	/**
	 * Setter de l'élément.
	 * 
	 * @param contenu Object, l'élément a setter.
	 */
	public void setContenu(Object contenu)
	{
		this.contenu = contenu;
	}

	/**
	 * Determine si l'élément contenu est null ou un String vide.
	 * 
	 * @return boolean, vrai si vide.
	 */
	public boolean isEmpty()
	{
		boolean empty = this.contenu == null;

		if (!empty)
		{
			if (this.contenu instanceof String)
			{
				empty = ((String) this.contenu).isEmpty();
			}
		}

		return empty;
	}

	/**
	 * Determine si l'attribut élément est null.
	 * 
	 * @return boolean, vrai si null.
	 */
	public boolean isNull()
	{
		return this.contenu == null;
	}

	/**
	 * Instancie une copie de la cellule.
	 * 
	 * @return une copie de la cellule.
	 */
	public DataNode createNode()
	{
		return new DataNode(this.getLigne(), this.getColonne(), this.contenu);
	}

	@Override
	public String toString()
	{
		return super.toString() + " : \"" + this.contenu + "\"";
	}
}
